const { createClient } = require('redis')

// redis 客户端实例
let client;

// 初始化 redis
const redisClient = async () => {
  if (client) return
  client = await createClient().on('error', (err) => console.log('Redis 连接失败', err)).connect()
}

/**
 * 存入缓存数据
 * @param key 键名
 * @param value 存储值
 * @param ttl 可选值，以秒为单位的过期时间
 */
const setKey = async (key, value, ttl = null) => {
  if (!client) await redisClient()
  value = JSON.stringify(value)
  await client.set(key, value)

  if (ttl !== null) {
    await client.expire(key, ttl)
  }
}

/**
 * 读取缓存数据
 * @param key 键名
 * @returns 返回缓存数据，如果没有找到则返回空对象 {}
 */
const getKey = async (key) => {
  if (!client) await redisClient()
  const value = await client.get(key)
  return JSON.parse(value || '{}')
}

/**
 * 删除缓存数据
 *  @param key 键名
 *  @returns {Promise<void>}
 */
const delKey = async (key) => {
  if (!client) await redisClient()
  await client.del(key)
}

module.exports = { setKey, getKey, delKey }